export async function asyncReadExcel(file: any) {
  var reader = new FileReader();
  reader.readAsArrayBuffer(file);
  let arraybuffer = null
  await new Promise((resolve, reject) => {
    reader.onload = function (e: any) {
      arraybuffer = e.target.result
      resolve(true)
    };
  })
  const workbook = await window.XLSX.read(arraybuffer);
  const firstSheetName = workbook.SheetNames[0];//第一张表
  const worksheet = workbook.Sheets[firstSheetName];
  // 自定义键名
  const headers = ['Id', 'Question', 'Answer1', 'Answer2', 'Dimension'];
  // 指定范围 A起始单元，C结束单元
  // const range = 'A5:E5'; // 从第五行开始，解析5列，这里只返回第五行数据
  // console.log(window.XLSX.utils.decode_range(worksheet['!ref'])); //打印103 少一行
  const range = 'A5:E' + (worksheet['!ref'] ? window.XLSX.utils.decode_range(worksheet['!ref']).e.r + 1 : 1000) // 从第五行开始解析到最后一行
  const jsonData = window.XLSX.utils.sheet_to_json(worksheet, {
    header: headers,
    skipHeader: true,//通常用于跳过表头
    range: range,
    raw: false, // 不获取原始数据
    defval: '' // 将空单元格设置为空字符串
  });
  return jsonData
}

export function createExcel(fileName: string, data: any[]) {
  // console.log('createExcel', data);
  // 创建一个新的工作簿
  const workbook = window.XLSX.utils.book_new();
  // 将数据转换为工作表
  const worksheet = window.XLSX.utils.json_to_sheet(data);
  window.XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
  return {
    uid: '-1', // 唯一标识，建议设置为负数或随机数
    name: fileName,
    status: 'done',
    originFileObj: '', // 原始文件对象
    url: 'null',
    workbook: workbook,
    from: 'xlsx-tool'
  };
}

export function downLoadExcel(fileName: string, workbook: any, callback?: any) {
  window.XLSX.writeFile(workbook, `${fileName}.xlsx`);
  callback?.()
}

export async function rewriteExcel(file: any) {
  var reader = new FileReader();
  reader.readAsArrayBuffer(file);
  let arraybuffer = null
  await new Promise((resolve, reject) => {
    reader.onload = function (e: any) {
      arraybuffer = e.target.result
      resolve(true)
    };
  })
  const workbook = await window.XLSX.read(arraybuffer);
  const firstSheetName = workbook.SheetNames[1];//第二张表
  const worksheet = workbook.Sheets[firstSheetName];
  const colIndex = 2; //第三列
  const lastColIndex = 5; //第六列
  const rowTotal = worksheet['!ref'].split(':')[1].replace(/[A-Z]/g, '')

  // 遍历工作表中的所有行
  for (let row = 1; row <= +rowTotal; row++) {
    for (let col = colIndex; col <= lastColIndex; col++) {
      if (col === lastColIndex) {
        // 获取最后一列的时间单元格引用
        const timeCell = { c: col, r: row };
        const timeCellRef = window.XLSX.utils.encode_cell(timeCell);
        // 确保最后一列的时间值格式不变
        if (worksheet[timeCellRef]) {
          /*
            单元格的类型（如 n 表示数字，s 表示字符串，d 表示日期等）
            打印单元格worksheet[timeCellRef]:{"t": "n","v": 45687.6511111111,"w": "2025/1/30 15:37:36"}
            库会根据单元格的类型（t）和原始值（v）来设置单元格的值，而不是直接使用显示值（w）
            worksheet[timeCellRef] = {
              t: 'd', // 设置单元格类型为日期
              v: worksheet[timeCellRef].v, // 设置单元格的值
              z: window.XLSX.SSF._table[14] // 使用预定义的日期格式代码，例如 14 对应 'mm/dd/yyyy hh:mm:ss'
            };
          */
          worksheet[timeCellRef] = {
            t: 's',
            v: worksheet[timeCellRef].w, // 设置单元格的值
          };
          continue;
        }
      } else {
        const cellAddress = { c: colIndex, r: row }; // 列 C 的单元格地址
        const cellRef = window.XLSX.utils.encode_cell(cellAddress); // 将地址转换为引用（如 'C1'）
        worksheet[cellRef] = { t: 'n', v: '123' }; // 设置单元格的值
      }
    }
  }

  window.XLSX.writeFile(workbook, 'new.xlsx');// 导出excel
}